package br.com.abril.booking;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.apache.commons.lang3.StringUtils;

import br.com.abril.prevision.ExecutivePrevision;

@Entity
public class ExecutiveBooking implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long pk;

	private String wallet;

	@Column(length = 10)
	private String dataReserva;

	private String valorLiquidoAnunciante__c;
	private String valorLiquidoAntesBV__c;
	private String valorBruto__c;
	private String reserva__c;
	private String quantidade__c;
	private String principalExecutivo__c;
	private String porcentagemAtendimento__c;
	private String percentualRateio__c;
	private String nomeExecutivoMigrado__c;
	private String name;
	private String lastModifiedDate;
	private String id;
	private String iDExterno__c;
	private String executivoMigrado__c;
	private String excluidoSVP__c;
	private String equipe3__c;
	private String equipe2__c;
	private String equipe1__c;
	private String dataInicioValidade__c;
	private String dataFimValidade__c;
	private String createdDate;
	private String ativo__c;

	private String product;
	private String advertiser;
	private String office;
	private String un;
	private String productGroup;

	@Column(length = 60)
	private String productId;

	@Column(length = 60)
	private String officeId;

	@Column(length = 60)
	private String advertiserId;
	
	private String jobExecutionStatus;

	@Column(length=4000)
	private String jobExecutionExceptionInfo;

	public ExecutiveBooking() {
	}

	public String getOfficeId() {
		return officeId;
	}

	public void setOfficeId(String officeId) {
		this.officeId = officeId;
	}

	public String getAdvertiserId() {
		return advertiserId;
	}

	public void setAdvertiserId(String advertiserId) {
		this.advertiserId = advertiserId;
	}

	public String getProductId() {
		return productId;
	}

	public void setProductId(String productId) {
		this.productId = productId;
	}


	public String getProductIdInt() {
		if (StringUtils.trimToEmpty(productId).equals("")) return "";
		
		try{
			return Double.valueOf(productId).intValue()  + "";
		}catch(NumberFormatException e) {}
		
		return "";
		
	}
	
	public String getOfficeIdInt() {
		if (StringUtils.trimToEmpty(officeId).equals("")) return "";
		
		try{
			return Double.valueOf(officeId).intValue() + "";
		}catch(NumberFormatException e) {}
		
		return "";
	
	}
		
	public String getAdvertiserIdInt() {
		if (StringUtils.trimToEmpty(advertiserId).equals("")) return "";
		
		try{
			return Double.valueOf(advertiserId).intValue() + "";
		}catch(NumberFormatException e) {}
		
		return "";
		
	}	
	
	
	public Long getPk() {
		return pk;
	}

	public void setPk(Long pk) {
		this.pk = pk;
	}

	public String getWallet() {
		return wallet;
	}

	public void setWallet(String wallet) {
		this.wallet = wallet;
	}

	public String getValorLiquidoAnunciante__c() {
		return valorLiquidoAnunciante__c;
	}

	public void setValorLiquidoAnunciante__c(String valorLiquidoAnunciante__c) {
		this.valorLiquidoAnunciante__c = valorLiquidoAnunciante__c;
	}

	public String getValorLiquidoAntesBV__c() {
		return valorLiquidoAntesBV__c;
	}

	public void setValorLiquidoAntesBV__c(String valorLiquidoAntesBV__c) {
		this.valorLiquidoAntesBV__c = valorLiquidoAntesBV__c;
	}

	public String getValorBruto__c() {
		return valorBruto__c;
	}

	public void setValorBruto__c(String valorBruto__c) {
		this.valorBruto__c = valorBruto__c;
	}

	public String getReserva__c() {
		return reserva__c;
	}

	public void setReserva__c(String reserva__c) {
		this.reserva__c = reserva__c;
	}

	public String getQuantidade__c() {
		return quantidade__c;
	}

	public void setQuantidade__c(String quantidade__c) {
		this.quantidade__c = quantidade__c;
	}

	public String getPrincipalExecutivo__c() {
		if (StringUtils.trimToEmpty(porcentagemAtendimento__c).equals(""))
			return "false";
		return principalExecutivo__c;
	}

	public void setPrincipalExecutivo__c(String principalExecutivo__c) {
		this.principalExecutivo__c = principalExecutivo__c;
	}

	public String getPorcentagemAtendimento__c() {
		if (StringUtils.trimToEmpty(porcentagemAtendimento__c).equals(""))
			return "0";
		return porcentagemAtendimento__c;
	}

	public void setPorcentagemAtendimento__c(String porcentagemAtendimento__c) {
		this.porcentagemAtendimento__c = porcentagemAtendimento__c;
	}

	public String getPercentualRateio__c() {
		if (StringUtils.trimToEmpty(percentualRateio__c).equals(""))
			return "0";

		return percentualRateio__c;
	}

	public void setPercentualRateio__c(String percentualRateio__c) {

		this.percentualRateio__c = percentualRateio__c;
	}

	public String getNomeExecutivoMigrado__c() {
		return nomeExecutivoMigrado__c;
	}

	public void setNomeExecutivoMigrado__c(String nomeExecutivoMigrado__c) {
		this.nomeExecutivoMigrado__c = nomeExecutivoMigrado__c;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getLastModifiedDate() {
		return lastModifiedDate;
	}

	public void setLastModifiedDate(String lastModifiedDate) {
		this.lastModifiedDate = lastModifiedDate;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getiDExterno__c() {
		return iDExterno__c;
	}

	public void setiDExterno__c(String iDExterno__c) {
		this.iDExterno__c = iDExterno__c;
	}

	public String getExecutivoMigrado__c() {
		return executivoMigrado__c;
	}

	public void setExecutivoMigrado__c(String executivoMigrado__c) {
		this.executivoMigrado__c = executivoMigrado__c;
	}

	public String getExcluidoSVP__c() {
		return excluidoSVP__c;
	}

	public void setExcluidoSVP__c(String excluidoSVP__c) {
		this.excluidoSVP__c = excluidoSVP__c;
	}

	public String getEquipe3__c() {
		return equipe3__c;
	}

	public void setEquipe3__c(String equipe3__c) {
		this.equipe3__c = equipe3__c;
	}

	public String getEquipe2__c() {
		return equipe2__c;
	}

	public void setEquipe2__c(String equipe2__c) {
		this.equipe2__c = equipe2__c;
	}

	public String getEquipe1__c() {
		return equipe1__c;
	}

	public void setEquipe1__c(String equipe1__c) {
		this.equipe1__c = equipe1__c;
	}

	public String getDataInicioValidade__c() {
		return dataInicioValidade__c;
	}

	public void setDataInicioValidade__c(String dataInicioValidade__c) {
		this.dataInicioValidade__c = dataInicioValidade__c;
	}

	public String getDataFimValidade__c() {
		return dataFimValidade__c;
	}

	public void setDataFimValidade__c(String dataFimValidade__c) {
		this.dataFimValidade__c = dataFimValidade__c;
	}

	public String getCreatedDate() {
		return createdDate;
	}

	public void setCreatedDate(String createdDate) {
		this.createdDate = createdDate;
	}

	public String getAtivo__c() {
		return ativo__c;
	}

	public void setAtivo__c(String ativo__c) {
		this.ativo__c = ativo__c;
	}

	public String getDataReserva() {
		return dataReserva;
	}

	public void setDataReserva(String dataReserva) {
		this.dataReserva = dataReserva;
	}

	public String getProduct() {
		return product;
	}

	public void setProduct(String product) {
		this.product = product;
	}

	public String getAdvertiser() {
		return advertiser;
	}

	public void setAdvertiser(String advertiser) {
		this.advertiser = advertiser;
	}

	public String getOffice() {
		return office;
	}

	public void setOffice(String office) {
		this.office = office;
	}

	public String getProductGroup() {
		return productGroup;
	}

	public void setProductGroup(String productGroup) {
		this.productGroup = productGroup;
	}

	public String getUn() {
		return un;
	}

	public void setUn(String un) {
		this.un = un;
	}

	public Date getBookingDate() {
		if (this.dataReserva == null)
			return null;
		try {
			return new SimpleDateFormat("yyyy-MM-dd").parse(this.dataReserva);
		} catch (ParseException e) {
		}
		return null;
	}

	public void defineWallet() {
		this.wallet = this.office + this.advertiser + this.product;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((pk == null) ? 0 : pk.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ExecutiveBooking other = (ExecutiveBooking) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (pk == null) {
			if (other.pk != null)
				return false;
		} else if (!pk.equals(other.pk))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "ExecutiveBooking [pk=" + pk + ", name=" + name + ", id=" + id
				+ "]";
	}
	
	public String getJobExecutionStatus() {
		return jobExecutionStatus;
	}

	public void setJobExecutionStatus(String jobExecutionStatus) {
		this.jobExecutionStatus = jobExecutionStatus;
	}

	public String getJobExecutionExceptionInfo() {
		return jobExecutionExceptionInfo;
	}

	public void setJobExecutionExceptionInfo(String jobExecutionExceptionInfo) {
		this.jobExecutionExceptionInfo = StringUtils.left(jobExecutionExceptionInfo,3000);
	}
	

}
